package usecasesimpl;

import java.util.Collections;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import usecases.GestionApprentiPizzaiolo;
import usecases.GestionConcoursPizza;
import usecases.GestionIngredient;
import util.Util;
import dao.ConcoursPizzaDao;
import domaine.ApprentiPizzaiolo;
import domaine.ConcoursPizza;
import domaine.Ingredient;
import exceptions.EtatInvalideException;

@Stateless
public class GestionConcoursPizzaImpl implements GestionConcoursPizza {

	@EJB
	private ConcoursPizzaDao concoursPizzaDao;

	@EJB
	private GestionApprentiPizzaiolo gestionApprentiPizzaiolo;
	
	@EJB
	private GestionIngredient gestionIngredient;
	
	@Override
	public ConcoursPizza creerPartie(ConcoursPizza concoursACreer) {

		Util.checkObject(concoursACreer);

		if (!concoursACreer.demarrerConcours())
			throw new EtatInvalideException();

		
		
		concoursACreer.genererUnePosition();
		concoursACreer= concoursPizzaDao.enregistrer(concoursACreer);
		
		List<Ingredient> ingredientsATirer = gestionIngredient.listeIngredients();
		Collections.shuffle(ingredientsATirer);
		for (int indice = 0; indice < ingredientsATirer.size(); indice++) {
			concoursACreer.getTiragesIngredients().put(indice + 1, ingredientsATirer.get(indice));
		}

		return concoursACreer;
	}

	@Override
	public List<ConcoursPizza> listeConcoursNonFini() {
		return concoursPizzaDao.listeConcoursNonFini();
	}


	@Override
	public ConcoursPizza rechercherConcours(String nomConcours) {
		return concoursPizzaDao.rechercherConcours(nomConcours);
	}

	@Override
	public List<ConcoursPizza> listeConcoursNonFini(ApprentiPizzaiolo apprenti) {

		apprenti=gestionApprentiPizzaiolo.getApprentiPizzaiolo(apprenti.getPseudo(), apprenti.getMdp());
		
		return concoursPizzaDao.listeConcoursNonFini(apprenti);
	}

	@Override
	public ConcoursPizza chargerPlateauApprenti(ApprentiPizzaiolo apprenti,
			ConcoursPizza concours) {
		Util.checkObject(concours);
		Util.checkObject(apprenti);
		return concoursPizzaDao.chargerPlateauxApprentis(
				concours.getIdConcours(), apprenti);

	}

	@Override
	public ConcoursPizza chargerTout(ConcoursPizza concours) {
		Util.checkObject(concours);
		return concoursPizzaDao.chargerTout(concours.getIdConcours());
	}

}
